Java Technologies Real-Life উদাহরণ (Comparable, Comparator) গাইড ও নোট

312

জাভার Comparable এবং Comparator ইন্টারফেস দুটি সাধারণত ব্যবহার করা হয় অবজেক্টের মধ্যে ক্রমানুসারে সাজানোর জন্য। এই ইন্টারফেসগুলোতে জেনেরিক্স ব্যবহার করে টাইপ-সেইফ এবং ফ্লেক্সিবল কোড তৈরি করা যায়।


Comparable Interface:

উদাহরণ: Student ক্লাসের অবজেক্ট সাজানো

import java.util.*;

class Student implements Comparable<Student> {
    private String name;
    private int marks;

    public Student(String name, int marks) {
        this.name = name;
        this.marks = marks;
    }

    public String getName() {
        return name;
    }

    public int getMarks() {
        return marks;
    }

    @Override
    public int compareTo(Student other) {
        // Ascending order by marks
        return Integer.compare(this.marks, other.marks);
    }

    @Override
    public String toString() {
        return "Student{name='" + name + "', marks=" + marks + "}";
    }
}

public class ComparableExample {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("Alice", 85));
        students.add(new Student("Bob", 75));
        students.add(new Student("Charlie", 95));

        // Sorting using Comparable
        Collections.sort(students);

        System.out.println("Sorted Students by Marks (Ascending):");
        for (Student student : students) {
            System.out.println(student);
        }
    }
}

আউটপুট:

Sorted Students by Marks (Ascending):
Student{name='Bob', marks=75}
Student{name='Alice', marks=85}
Student{name='Charlie', marks=95}

Comparator Interface:

উদাহরণ: একাধিক ক্রাইটেরিয়ায় সাজানো

import java.util.*;

class Student {
    private String name;
    private int marks;

    public Student(String name, int marks) {
        this.name = name;
        this.marks = marks;
    }

    public String getName() {
        return name;
    }

    public int getMarks() {
        return marks;
    }

    @Override
    public String toString() {
        return "Student{name='" + name + "', marks=" + marks + "}";
    }
}

class NameComparator implements Comparator<Student> {
    @Override
    public int compare(Student s1, Student s2) {
        // Ascending order by name
        return s1.getName().compareTo(s2.getName());
    }
}

class MarksComparator implements Comparator<Student> {
    @Override
    public int compare(Student s1, Student s2) {
        // Descending order by marks
        return Integer.compare(s2.getMarks(), s1.getMarks());
    }
}

public class ComparatorExample {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("Alice", 85));
        students.add(new Student("Bob", 75));
        students.add(new Student("Charlie", 95));

        // Sorting by Name
        Collections.sort(students, new NameComparator());
        System.out.println("Sorted Students by Name (Ascending):");
        for (Student student : students) {
            System.out.println(student);
        }

        // Sorting by Marks
        Collections.sort(students, new MarksComparator());
        System.out.println("\nSorted Students by Marks (Descending):");
        for (Student student : students) {
            System.out.println(student);
        }
    }
}

আউটপুট:

Sorted Students by Name (Ascending):
Student{name='Alice', marks=85}
Student{name='Bob', marks=75}
Student{name='Charlie', marks=95}

Sorted Students by Marks (Descending):
Student{name='Charlie', marks=95}
Student{name='Alice', marks=85}
Student{name='Bob', marks=75}

Lambda Expressions এবং Comparator:

উদাহরণ: Comparator Lambda ব্যবহার

import java.util.*;

class Student {
    private String name;
    private int marks;

    public Student(String name, int marks) {
        this.name = name;
        this.marks = marks;
    }

    public String getName() {
        return name;
    }

    public int getMarks() {
        return marks;
    }

    @Override
    public String toString() {
        return "Student{name='" + name + "', marks=" + marks + "}";
    }
}

public class LambdaComparatorExample {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("Alice", 85));
        students.add(new Student("Bob", 75));
        students.add(new Student("Charlie", 95));

        // Sorting by Name using Lambda
        students.sort((s1, s2) -> s1.getName().compareTo(s2.getName()));
        System.out.println("Sorted Students by Name (Ascending):");
        for (Student student : students) {
            System.out.println(student);
        }

        // Sorting by Marks using Lambda
        students.sort((s1, s2) -> Integer.compare(s2.getMarks(), s1.getMarks()));
        System.out.println("\nSorted Students by Marks (Descending):");
        for (Student student : students) {
            System.out.println(student);
        }
    }
}

কেন জেনেরিক্স ব্যবহার গুরুত্বপূর্ণ?

  1. টাইপ সেফটি: অবজেক্টের টাইপ কাস্ট করতে হয় না।
  2. Reusable Code: একাধিক টাইপের জন্য একই Comparator বা Comparable ব্যবহার করা যায়।
  3. Compile-Time Checking: টাইপ মিসম্যাচ এড়ায়।
  4. Readable Code: টাইপ কাস্টিং ছাড়া কোড সহজে বোঝা যায়।

  • Comparable এবং Comparator ইন্টারফেস জাভার বাস্তব জীবনের সমস্যাগুলো সমাধান করতে সাহায্য করে, বিশেষত অবজেক্ট সাজানোর ক্ষেত্রে।
  • জেনেরিক্স টাইপ সেফটি এবং কোডের পুনঃব্যবহার নিশ্চিত করে, বড় আকারের প্রজেক্টে কার্যকর ভূমিকা পালন করে।
Content added By
Promotion

Are you sure to start over?

Loading...